package com.sign2024.sign2024project.projectservice.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sign2024.sign2024core.entry.projectservice.HistoricalRelational;
import com.sign2024.sign2024core.entry.projectservice.SpecialtySignRelation;
import com.sign2024.sign2024project.projectservice.param.RelationParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 专家专业与标段对应关系 数据层
 *
 * @author yujie
 * @data 2024/8/1 9:22
 */
public interface SpecialtySignRelationMapper extends BaseMapper<SpecialtySignRelation> {


    /**
     * 分页查询指定行数据
     *
     * @param param 分页参数
     * @return 分页对象列表
     */
    List<SpecialtySignRelation> selectRelationByPage(RelationParam param);

    /**
     * 统计分页总条数
     *
     * @param param 分页参数
     * @return 统计分页总条数
     */
    Long pageRelationCount(RelationParam param);


    List<SpecialtySignRelation> exportInfoList(RelationParam param);

    /**
     * 清空专家对应关系
     */
    void cleanSpecialtySignRelation();

    /**
     * 获取专家对应关系 表
     *
     * @return
     */
    List<SpecialtySignRelation> selectAllList();

    /**
     * 更新数据
     *
     * @param specialtySignRelation 实例对象
     * @return 影响行数
     */
    int updateSpecialtySignRelation(SpecialtySignRelation specialtySignRelation);

    /**
     * 新增数据
     *
     * @param specialtySignRelation 实例对象
     * @return 影响行数
     */
    int insertSpecialtySignRelation(SpecialtySignRelation specialtySignRelation);


    /**
     * 批量新增数据
     *
     * @param entities List<SpecialtySignRelation> 实例对象列表
     * @return 影响行数
     */
    int insertBatchSpecialtySignRelation(@Param("entities") List<SpecialtySignRelation> entities);

    /**
     * 删除专家对应关系表数据
     *
     * @return 影响行数
     */
    int deleteSpecialty();

    /**
     * 根据 物料编码 匹配 专家专业
     *
     * @param materialCode 物料编码
     * @return 专家专业信息
     */
    SpecialtySignRelation selectRelationByCode(String materialCode);

    // --------------------- 专家对应关系历史表 ---------------------------

    /**
     * 获取专家对应关系历史表 中 最新版本号
     *
     * @return 最新版本号
     */
    Integer countMaxVersionCode();

    /**
     * 批量新增 专家对应关系历史表
     *
     * @param entities    专家对应关系历史表
     * @param versionCode 版本号
     * @return 影响行数
     */
    int insertBatchHistoricalRelational(@Param("entities") List<HistoricalRelational> entities,
                                        @Param("versionCode") Integer versionCode);

    /**
     * 获取 最新版本号数据
     *
     * @return 专家对应关系历史 数据
     */
    List<HistoricalRelational> selectHistoricalByMaxCode();


    /**
     * 新增数据
     *
     * @param historicalRelational 实例对象
     * @return 影响行数
     */
    int insertHistoricalRelational(HistoricalRelational historicalRelational);

    /**
     * 清空专家对应关系 历史表
     */
    void cleanHistorical();
}
